package com.sdry.good.logistics.service;

import com.sdry.good.logistics.entity.ReportDeficiencyOrderDetail;
import com.sdry.good.logistics.entity.ReportPicking;
import com.sdry.product.waitingarea.entity.StayContainerStare;

import java.util.List;

/**
 * 领料清单
 * @author makejava
 * @since 2020-04-02 15:29:39
 */
public interface ReportPickingService {

    /**
     * 通过ID查询单条数据
     *
     * @param picId 主键
     * @return 实例对象
     */
    ReportPicking queryById(Long picId);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    List<ReportPicking> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param reportPicking 实例对象
     * @return 实例对象
     */
    ReportPicking insert(ReportPicking reportPicking);

    /**
     * 修改数据
     *
     * @param reportPicking 实例对象
     * @return 实例对象
     */
    ReportPicking update(ReportPicking reportPicking);

    /**
     * 通过主键删除数据
     *
     * @param picId 主键
     * @return 是否成功
     */
    boolean deleteById(Long picId);

    /**
     * 分页查询领料单
     * @param reportPicking 实例对象
     * @return IPage<ReportPicking>
     */
    List<ReportPicking> queryReportPickingPage(ReportPicking reportPicking);

    /**
     * 分页查询总数
     * @param reportPicking 实例对象
     * @return IPage<ReportPicking>
     */
    Long queryReportPickingTotal(ReportPicking reportPicking);

    /**
     * 条件查询数据(permissionType传值必须传remark才起作用——X)
     * @param param 实体条件
     * @return 实体集合
     */
    public List<ReportPicking> queryAllByMution(ReportPicking param);
    /**
     * 条件查询清单permissionType传值必须传remark才起作用——X)
     * @param param 实体条件
     * @return 实体集合
     */
    public List<ReportPicking> queryPiNumberAllByMution(ReportPicking param);
    /**
     *	判断成品链是否满足接收的领料信息返回不满足的领料信息
     * @param ids 领料信息id集合
     * @param nums 领料信息数量集合（与id对应）
     * @param code 扫码集合 用","分割
     * @return 不满足的领料信息
     */
    public List<ReportPicking> isSatisfyReportPickingsByPicIds(String ids,String nums,String code);
    /**
     *	成品链或成品库根据接收的领料信息进行解绑
     * @param ids 领料信息id集合
     * @param nums 领料信息数量集合（与id对应）
     * @param oid 出库单id
     * @param code 扫码集合 用","分割
     * @return 解绑领料信息数
     */
    public Integer  outReportPickingsByPicIds(String ids,String nums,Long oid,String code);

    /**
     * 根据条件查询待发货信息
     * @param stayContainerStare 条件
     * @return
     */
    List<StayContainerStare> queryStayContainerStareByMution(StayContainerStare stayContainerStare);

    /**
     * 根据rdId查询报缺物料
     * @param rdoId
     * @return
     */
    List<ReportDeficiencyOrderDetail> queryReportDeficiencyOrder(Long rdoId);

    /**
     * 添加报缺计划
     * @param rdoId
     */
    void addReportPicking(Long rdoId);

    /**
     * 领料单添加
     * @param quantity 数量
     * @param maIds 物料ID
     * @param remark1 备注
     * @param plNumber 编号
     * @return boolean
     */
    boolean addReportPickingManual(String quantity, String maIds, String remark1, String plNumber);

    /**
     * 删除
     * @param picId
     * @return
     */
    Integer delReportPicking(Long picId);
}